*BEGIN WORDS VERSION=500/320 ENCODING=7BIT
<Applix Words>
<asc @(#)% matt 9                 
>
<Globals levelIndent:500 hyphMethod:2 facingPages headerMargin:250 footerMargin\
 :250 changeBarPos:0>
<start_styles>
<style "Normal" no-pageBreak no-keepWith no-block justifyLeft indentToLevel spe\
 llcheck firstIndent:0 leftIndent:0 rightIndent:0 lineSpacingMode2:6 lineSpacin\
 gMode:0 lineSpacingCountHeight:1000 lineSpacingSep:0 preParaSpacing:0 postPara\
 Spacing:0 level:0 hyphZone:250 hyphMinFrag:2  no-bold no-italic no-strikethru \
 no-hidden no-caps no-underline hyphenate color:"Black" face:"Helvetica" size:1\
 2 position:0 tag:""  lB:0:0:"" rB:0:0:"" tB:0:0:"" bB:0:0:"" hB:0:0:"" vB:0:0:\
 "" shading:18:"":"":"" horizontalMargin:0 verticalMargin:0 dropShadow:0  local\
 Tabs  noFrame  >
<style "Address" parent "Recipient" nextStyle "AddressNext" >
<style "AddressLast" parent "Recipient" nextStyle "Salutation" postParaSpacing:\
 250  >
<style "AddressNext" parent "Recipient" nextStyle "AddressLast" >
<style "Bullet" parent "Paragraph" glossary "Bullet" leftIndent:250  localTabs \
 lT:250  >
<style "BulletPara" parent "Bullet" firstIndent:250 leftIndent:250  localTabs l\
 T:250  >
<style "CC" parent "Paragraph" glossary "CC" nextStyle "CC_Continue" postParaSp\
 acing:0  >
<style "CC_Continue" parent "CC" firstIndent:500 leftIndent:500 postParaSpacing\
 :0  >
<style "Cell" parent "Normal" postParaSpacing:0  >
<style "Closing" parent "Paragraph" nextStyle "Signature" preParaSpacing:110 po\
 stParaSpacing:1000  >
<style "Code" parent "Normal" nextStyle "Code" face:"Courier" size:8  >
<style "Date" parent "Normal" nextStyle "Recipient" postParaSpacing:500  >
<style "Enclosures" parent "Paragraph" glossary "Enclosures" nextStyle "CC" >
<style "Fixme" parent "Normal" nextStyle "Fixme" color:"Red"  shading:0:"Black"\
 :"Grey 75":"" dropShadow:0  noFrame  >
<style "Footnote" parent "Normal" >
<style "HdrFtr" parent "Normal" localTabs cT:3500 rT:7000  >
<style "Heading" parent "Normal" nextStyle "Normal" keepWith preParaSpacing:300\
  postParaSpacing:100  bold size:16  >
<style "html_hyperlink_text" parent "Normal" nextStyle "html_hyperlink_text" un\
 derline color:"HtmlLinkDefault@"  >
<style "NumList" parent "Paragraph" glossary "NumList" firstIndent:0 leftIndent\
 :325  localTabs dT:187:"."  >
<style "NumListPara" parent "NumList" firstIndent:325  localTabs lT:250  >
<style "NumListStart" parent "NumList" glossary "NumListStart" nextStyle "NumLi\
 st" >
<style "Paragraph" parent "Normal" postParaSpacing:140  >
<style "Recipient" parent "Normal" nextStyle "Address" >
<style "Salutation" parent "AddressLast" nextStyle "Paragraph" >
<style "Signature" parent "Paragraph" nextStyle "Enclosures" postParaSpacing:50\
 0  >
<series "main" 0 1 3 2 4 0 0 0 0 0 trailer:". ">
<series "Footnote$" 0 0 0 0 0 0 0 0 0 0>
<series "Endnote$" 0 0 0 0 0 0 0 0 0 0>
<series "numberStyle" 0 1 2 3 4 0 0 0 0 0 trailer:". ">
<series "NumList" 0 1 2 3 4 0 0 0 0 0 trailer:".">
<S_G "FootnoteBar@" live>
<T "_________________________">
<P "Normal">
<E_G>
<S_G "FootnoteContBar@" live>
<T "__________________________________________________">
<P "Normal">
<E_G>
<S_G "EndnoteBar@" live>
<T "_________________________">
<P "Normal">
<E_G>
<S_G "TableContinuation@" live>
<T "(cont.)">
<E_G>
<S_G "Enclosures" live>
<T "Enclosures:^aj" no-underline >
<E_G>
<S_G "CC" live>
<T "CC:^aj">
<E_G>
<S_G "Bullet" live>
<T "^lh" face:"Symbol" >
<T "^aj">
<E_G>
<S_G "NumList" live>
<T "^aj">
<S_F fieldType:3>
<T "series \"NumList\"">
<FV>
<T "2.">
<E_F>
<T "^aj">
<E_G>
<S_G "NumListStart" live>
<T "^aj">
<S_F fieldType:3>
<T "series \"NumList\" -set 1">
<FV>
<T "1. ">
<E_F>
<T "^aj">
<E_G>
<color "White":0:0:0:0>
<color "Black":0:0:0:255>
<color "Grey 95":0:0:0:13>
<color "Grey 87":0:0:0:33>
<color "Grey 75":0:0:0:64>
<color "Grey 50":0:0:0:128>
<color "Red":0:255:255:0>
<color "Red 95":13:255:255:0>
<color "Red 87":33:255:255:0>
<color "Red 75":64:255:255:0>
<color "Red 50":128:255:255:0>
<color "Green":255:0:255:0>
<color "Green 95":255:13:255:0>
<color "Green 87":255:33:255:0>
<color "Green 75":255:64:255:0>
<color "Green 50":255:128:255:0>
<color "Blue":255:255:0:0>
<color "Blue 95":255:255:13:0>
<color "Blue 87":255:255:33:0>
<color "Blue 75":255:255:64:0>
<color "Blue 50":255:255:128:0>
<color "Yellow":0:0:255:0>
<color "Yellow 95":0:0:255:13>
<color "Yellow 87":0:0:255:33>
<color "Yellow 75":0:0:255:64>
<color "Yellow 50":0:0:255:128>
<color "Magenta":0:255:0:0>
<color "Magenta 95":0:255:0:13>
<color "Magenta 87":0:255:0:33>
<color "Magenta 75":0:255:0:64>
<color "Magenta 50":0:255:0:128>
<color "Cyan":255:0:0:0>
<color "Cyan 95":255:0:0:13>
<color "Cyan 87":255:0:0:33>
<color "Cyan 75":255:0:0:64>
<color "Cyan 50":255:0:0:128>
<color "Tan":0:57:131:0>
<color "Clay":0:74:74:57>
<color "Brown":30:100:220:30>
<color "Dark Brown":60:135:190:65>
<color "Olive":90:65:190:65>
<color "Light Orange":0:33:255:0>
<color "Orange":0:90:255:0>
<color "Dark Orange":0:132:255:0>
<color "Light Purple":31:153:0:0>
<color "Purple":80:208:0:15>
<color "Dark Purple":25:126:0:44>
<color "HtmlLinkDefault@":255:255:0:0>
<end_styles>
<start_flow>
<WP400 "This file must be filtered to be read in WP 3.11">
<P "Normal" justifyRight  bold size:36 >
<P "Normal" justifyRight  bold size:36 >
<P "Normal" justifyRight  bold size:36 >
<T "DCOracle2" bold size:36 >
<P "Normal" justifyRight  bold size:36 >
<T "C Layer API" bold size:36 >
<P "Normal" justifyRight  bold size:36 >
<P "Normal" justifyRight  bold size:18 >
<T "Release 1.1" bold size:18 >
<P "Normal" justifyRight  bold size:18 >
<S_F fieldType:1
<start_eval_value>
<T "April 17, 2002">
<end_eval_value>
>
<T "date 4 -format \"Mmmm d, yyyy\" -saveEval">
<FV>
<T "April 17, 2002" bold size:18 >
<E_F>
<P "Normal" justifyRight  bold size:36 >
<P "Normal" justifyRight >
<T "Matthew T. Kromer">
<P "Normal" justifyRight >
<T "Copyright ^kj 2000, 2001, 2002 Zope Corporation">
<P "Normal" justifyRight >
<P "Normal">
<P "Normal">
<P "Normal">
<P "Normal">
<P "Normal">
<P "Normal">
<P "Normal">
<P "Normal">
<P "Normal">
<P "Normal">
<P "Normal">
<P "Normal">
<P "Normal">
<P "Normal">
<P "Normal">
<P "Normal">
<T "Zope Corporation" bold size:18 >
<P "Normal" justifyRight >
<T "Lafayette Technology Center">
<P "Normal" justifyRight >
<T "513 Prince Edward Street">
<P "Normal" justifyRight >
<T "Fredericksburg, VA 22408">
<P "Normal" justifyRight >
<T "(888) 344-4332 (sales)">
<P "Normal" justifyRight >
<T "http://www.zope.com">
<P "Normal" justifyRight >
<P "Normal">
<T "LICENSE">
<P "Heading">
<T "Redistribution and use in source and binary forms, with or without modifica\
 tion, are permitted provided that the following conditions are  met:" size:12 \
 >
<P "Normal" size:12 >
<P "Normal" size:12 >
<T "^lh" face:"Symbol" size:12 >
<T "^ajRedistributions of source code must retain the above copyright notice, t\
 his list of conditions, and the following disclaimer." size:12 >
<P "BulletPara" size:12 >
<T "^lh" face:"Symbol" size:12 >
<T "^ajRedistributions in binary form must reproduce the above copyright notice\
 , this list of conditions, and the following disclaimer in the documentation a\
 nd/or other materials provided with the distribution." size:12 >
<P "BulletPara" size:12 >
<T "^lh" face:"Symbol" size:12 >
<T "^ajNames associated with Zope or Zope Corporation must not be used to endor\
 se or promote products derived from this software without specific prior writt\
 en permission from Zope Corporation." size:12 >
<P "BulletPara" firstIndent:250  size:12 >
<T "^lh" face:"Symbol" size:12 >
<T "^ajModified redistributions in any form whatsoever must retain the followin\
 g acknowledgment:" size:12 >
<P "BulletPara" firstIndent:250 leftIndent:250  size:12 >
<T "^aj\"This product includes software developed by Zope Corporation for use i\
 n the Z Object Publishing Environment (http://www.zope.com/).\"" size:12 >
<P "BulletPara" firstIndent:250 leftIndent:500  size:12 >
<T "^ajIntact (re-)distributions of any official Zope release do not require an\
  external acknowledgment." size:12 >
<P "BulletPara" firstIndent:250 leftIndent:500  size:12 >
<P "Normal" size:12 >
<T "THIS SOFTWARE IS PROVIDED BY ZOPE CORPORATION AND CONTRIBUTORS " size:12 >
<T "AS IS" bold size:12 >
<T " AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \
 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\
  DISCLAIMED.  IN NO EVENT SHALL ZOPE CORPORATION OR CONTRIBUTORS BE LIABLE FOR\
  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGE\
 S  INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND O\
 N ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INC\
 LUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFT\
 WARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." size:12 >
<P "Normal" justifyFull  size:12 >
<section  next_page pageWidth:8500 pageHeight:11000 leftMargin:1000 rightMargin\
 :1000 topMargin:1000 bottomMargin:1000 bindingMargin:0 paperSize:1 duplex:1 gu\
 tterWidth:500 oddHeader:Normal "_AX_HF_1" firstHeader:Normal "_AX_HF_2" oddFoo\
 ter:Normal "_AX_HF_3" firstFooter:Normal "_AX_HF_4" sectNumFmt:-1 sectPageSep:\
 "-" pageNumFmt:0 pageNumCtl:0>
<T "DCOracle2 C Layer API Documentation">
<P "Heading">
<T "This document describes the various objects and interfaces to the dco2 C bi\
 nding for Python to the Oracle 8 Call Interface (oci8).  Under normal circumst\
 ances, no exposure to dco2 is required for users of DCOracle2.  ">
<T "This reference is provided for completeness, but does not form an official \
 application programming interface -- as such, it may be changed at any time, w\
 ithout warning." bold >
<P "Normal" bold >
<T "Usage">
<P "Heading">
<T "import dco2">
<P "Code">
<P "Code">
<T "ServerContext" italic >
<T " = dco2.connect(">
<T "userid" italic >
<T ", ">
<T "password" italic >
<T ", ">
<T "database" italic >
<T ")">
<P "Code">
<T "tracebacklist" italic >
<T " = " no-italic >
<T "dco2.Traceback()">
<P "Code">
<T "oracledate " italic >
<T "= dco2.OracleDate(" no-italic >
<T "ticks" italic >
<T ")" no-italic >
<P "Code">
<P "Code">
<T "ServerContext" italic >
<T ".commit()">
<P "Code">
<T "ServerContext" italic >
<T ".prepare()">
<P "Code">
<T "ServerContext" italic >
<T ".rollback()">
<P "Code">
<T "description " italic >
<T "= " no-italic >
<T "ServerContext." italic >
<T "describe(" no-italic >
<T "schemaname" italic >
<T ")" no-italic >
<P "Code">
<T "bindingarray" italic >
<T " = " no-italic >
<T "ServerContext." italic >
<T "BindingArray(" no-italic >
<T "elements, size, type" italic >
<T ")" no-italic >
<P "Code">
<P "Code">
<T "Cursor" italic >
<T " = ">
<T "ServerContext" italic >
<T ".cursor()">
<P "Code">
<P "Code">
<T "Cursor" italic >
<T ".prepare(">
<T "statement" italic >
<T ")">
<P "Code">
<T "Cursor" italic >
<T ".bindbypos(">
<T "pos" italic >
<T ", ">
<T "value" italic >
<T ")">
<P "Code">
<T "Cursor" italic >
<T ".bindbyname(">
<T "name" italic >
<T ", ">
<T "value" italic >
<T ")">
<P "Code">
<T "Cursor" italic >
<T ".execute()">
<P "Code">
<T "description" italic >
<T " = ">
<T "Cursor" italic >
<T ".describe()">
<P "Code">
<T "ResultSet" italic >
<T " = ">
<T "Cursor" italic >
<T ".fetch(">
<T "n" italic >
<T ")">
<P "Code">
<T "Cursor." italic >
<T "setPrefetch(" no-italic >
<T "records" italic >
<T "[, " no-italic >
<T "size" italic >
<T "])" no-italic >
<P "Code">
<T "Cursor" italic >
<T ".rowcount()" no-italic >
<P "Code">
<P "Code">
<T "value" italic >
<T " = ">
<T "ResultSet" italic >
<T "[">
<T "i" italic >
<T "][">
<T "j" italic >
<T "].value()">
<P "Code">
<T "string" italic >
<T " = str(">
<T "ResultSet" italic >
<T "[">
<T "i" italic >
<T "][">
<T "j" italic >
<T "])">
<P "Code">
<P "Code">
<T "length" italic >
<T " = " no-italic >
<T "LobLocator" italic >
<T ".length()" no-italic >
<P "Code">
<T "data" italic >
<T " = " no-italic >
<T "LobLocator" italic >
<T ".read([" no-italic >
<T "bytes" italic >
<T ", [" no-italic >
<T "offset" italic >
<T ", [" no-italic >
<T "csid" italic >
<T ", [" no-italic >
<T "csfrm" italic >
<T "]]]])" no-italic >
<P "Code">
<T "count" italic >
<T " = " no-italic >
<T "LobLocator" italic >
<T ".write(" no-italic >
<T "string" italic >
<T ", [" no-italic >
<T "offset" italic >
<T ", [" no-italic >
<T "csid" italic >
<T ", [" no-italic >
<T "csfrm" italic >
<T "]]])" no-italic >
<P "Code" justifyLeft >
<T "LobLocator" italic >
<T ".trim(" no-italic >
<T "length" italic >
<T ")" no-italic >
<P "Code">
<P "Code">
<T "BindingArray." italic >
<T "setStatic({0|1})" no-italic >
<P "Code">
<T "BindingArray." italic >
<T "type(" no-italic >
<T "[" no-italic no-underline >
<T "type" italic no-underline >
<T "])" no-italic no-underline >
<P "Code" no-underline >
<T "BindingArray." italic no-underline >
<T "width()" no-italic no-underline >
<P "Code" no-underline >
<T "Objects">
<P "Heading">
<T "ServerContext">
<P "Code">
<T "Cursor">
<P "Code">
<T "BindingArray">
<P "Code">
<T "ResultSet">
<P "Code">
<T "ResultSetItem">
<P "Code">
<T "OracleDate">
<P "Code">
<T "LobLocator">
<P "Code">
<T "Error">
<P "Code">
<T "Warning">
<P "Code">
<T "InterfaceError">
<P "Code">
<T "DatabaseError">
<S_F fieldType:4 botPage footnote "2">
<T "footnote">
<FV>
<T "1" position:3 >
<E_F>
<P "Code">
<T "InternalError">
<P "Code">
<T "OperationalError">
<P "Code">
<T "ProgrammingError">
<P "Code">
<T "IntegrityError">
<P "Code">
<T "DataError">
<P "Code">
<T "NotSupportedError">
<P "Code">
<T "dco2.connect(">
<T "userid" italic >
<T ", ">
<T "password" italic >
<T ", ">
<T "database" italic >
<T ")">
<P "Heading">
<T "The Connect method connects to the database with the specified credentials;\
   it returns a ">
<T "ServerContext" face:"Courier" >
<T " object.  When the ">
<T "ServerContext" face:"Courier" >
<T " object goes out of scope (is deallocated) the session is terminated.  If "\
 >
<T "database" no-bold italic >
<T " is \"\", the default database is used.   If " no-bold >
<T "userid" no-bold italic >
<T " and " no-bold >
<T "password" no-bold italic >
<T " are \"\", then " no-bold >
<T "OCI_CRED_EXT" no-bold face:"Courier" >
<T " external credentials are used for authentication as opposed to " no-bold >
<T "OCI_DEFAULT" no-bold face:"Courier" >
<T " authentication." no-bold >
<P "Normal">
<T "dco2.Traceback()">
<P "Heading">
<T "The Traceback method on the module will return the current traceback table \
 as a list of lists.  The first element for each row is the timestamp, the seco\
 nd element is the trace code, and the remaining elements are trace data.">
<P "Normal">
<T "dco2.OracleDate(">
<T "ticks" italic >
<T ")">
<P "Heading">
<T "Constructs an OracleDate object based on the timestamp in ">
<T "ticks" face:"Courier" size:12 >
<T ", which should be given in GMT.  OracleDate objects are used to pass DATE f\
 ields in and out of Oracle when binding positionally.  When referred to in a s\
 tring context, the OracleDate returns  a string representation as \"yyyy-mm-dd\
  hh:mm:ss\" and in an integer context, returns the timestamp as seconds since \
 the epoch.">
<P "Normal">
<T "ServerContext" italic >
<T ".commit([2])">
<P "Heading">
<T "The commit method commits the data in the current transaction.  If the opti\
 onal parameter 2 is specified, the commit is performed using ">
<T "OCI_TRANS_TWOPHASE" face:"Courier" >
<T " vs. the default of ">
<T "OCI_DEFAULT" face:"Courier" >
<T ".  Note that in a globally managed transaction a two phase commit can intro\
 duce an indeterminate state.">
<P "Normal">
<T "ServerContext" italic >
<T ".prepare()">
<P "Heading">
<T "The prepare method prepares the data to be committed in the current transac\
 tion.">
<P "Normal">
<T "ServerContext" italic >
<T ".rollback()">
<P "Heading">
<T "The rollback method discards any changes in the current transaction.">
<P "Normal">
<T "SeverContext" italic >
<T ".describe(" no-italic >
<T "schemaname" italic >
<T ")" no-italic >
<P "Heading">
<T "This method gets back a set of nested dictionaries describing the named sch\
 ema object, returned from the OCIDescribeAny call.">
<P "Normal">
<T "ServerContext." italic >
<T "BindingArray(" no-italic >
<T "elements, size, type" italic >
<T ")" no-italic >
<P "Heading">
<T "This returns a BindingArray object of at least ">
<T "elements" italic >
<T " length, each element being " no-italic >
<T "size" italic >
<T " bytes long, with the specified Oracle " no-italic >
<T "type" italic >
<T ".  BindingArrays may be used with cursor binding operations for operations \
 which require writing back into the bound parameters (stored procedure calls).\
 " no-italic >
<P "Normal">
<T "ServerContext" italic >
<T ".cursor()">
<P "Heading">
<T "The cursor method generates a cursor which is a combination of Oracle state\
 ment handles, statement definitions, binding data, and result information.  A \
 cursor must be allocated for any SQL work to be performed.">
<P "Normal">
<T "Cursor" italic >
<T ".prepare(">
<T "statement" italic >
<T ")">
<P "Heading">
<T "The prepare method parses a SQL statement and prepares it for execution.  N\
 o server round trip is involved in preparation.">
<P "Normal">
<T "Cursor" italic >
<T ".bindbypos(">
<T "pos, object, " italic >
<T "[">
<T "type" italic >
<T "]">
<T ")" italic >
<P "Heading">
<T "The bindbypos method binds an object to an input position in a statement.  \
 The ">
<T "pos" italic >
<T " parameter starts with 1, for the first positional parameter.  For example:\
 " no-italic >
<P "Normal">
<P "Normal">
<T "c.prepare(\"select * from emp where empno = :1\")">
<P "Code" level:1 >
<T "c.bindbypos(1, empno)">
<P "Code" level:1 >
<P "Code" level:1 >
<P "Normal">
<T "See the section on ``Type Conversion Rules'' below for a detailed descripti\
 on of how an object is bound.">
<P "Normal">
<P "Normal">
<T "Cursor" italic >
<T ".bindbypos will throw a ">
<T "ValueError" face:"Courier" >
<T " if it cannot adequately bind ">
<T "object" italic >
<T "." no-italic >
<P "Normal">
<P "Normal">
<T "Note that a ResultSet or ResultSet Item is not supported by bindbypos, mean\
 ing the output of a SELECT cannot be immediately reused!  ">
<P "Fixme">
<T "Cursor" italic >
<T ".bindbyname(">
<T "name" italic >
<T ", ">
<T "value" italic >
<T ")">
<P "Heading">
<T "The functional eqivalent of ">
<T "Cursor" italic >
<T ".bindbypos, this binds a variable to a statement by name, rather than by po\
 sition.  All relelvant " no-italic >
<T "Cursor" italic >
<T ".bindbypos comments apply." no-italic >
<P "Normal">
<T "Note that the name used should be \":name\", with a leading colon.  The dco\
 2 module does not automatically insert the colon.">
<P "Normal">
<T "Cursor" italic >
<T ".execute()">
<P "Heading">
<T "The execute method of the cursor will cause the statement handle bound by t\
 he prepare method to be executed.  After an execution, the statement result de\
 finitions are obtained and made available for the ">
<T "Cursor" italic >
<T ".describe() method.">
<P "Normal">
<T "Cursor" italic >
<T ".describe()">
<P "Heading">
<T "The describe method of the cursor will return a list of 7-tuples ">
<T "(name, type, size, size, precision, scale, nullok)" face:"Courier" >
<T " for each column in the result of the statement.  The Python DB API 2.0 spe\
 cification states that the first size is the display_size and the second is th\
 e internal_size.  The Oracle maximum external data representation size field i\
 s returned for both values.">
<P "Normal">
<T "Cursor" italic >
<T ".fetch([">
<T "n" italic >
<T "])">
<P "Heading">
<T "The fetch method of the cursor will fetch the next ">
<T "n" italic >
<T " results from the results of the statement   The default is to fetch one re\
 sult.  The return value of " no-italic >
<T "Cursor" italic >
<T ".fetch() is a list of ResultSet objects.  Each ResultSet object acts as a s\
 equence. An individual value of a ResultSet is a ResultSetItem." no-italic >
<P "Normal">
<P "Normal">
<T "Note:" no-italic >
<T " Cursor" italic >
<T ".fetch returns a list of columns, not a list of rows.  The DCOracle2 fetch \
 methods will reorder the columns into rows.">
<P "Normal">
<T "Cursor." italic >
<T "setPrefetch(" no-italic >
<T "rows" italic >
<T " [, " no-italic >
<T "size" italic >
<T "])" no-italic >
<P "Heading">
<T "Sets the prefetching on the cursor.  Size is the size in bytes to allocate.\
   Oracle will prefetch up to ">
<T "rows" italic >
<T " results or until a buffer or " no-italic >
<T "size" italic >
<T " is filled when executing queries." no-italic >
<P "Normal">
<T "Cursor." italic >
<T "rowcount()" no-italic >
<P "Heading">
<T "Gets the row count of the last operation.  For non-select operations, this \
 is the number of rows affected by the operation.  For select operations, the v\
 alue is updated as rows are fetched, but does not indicate the total number of\
  records available to be returned.">
<P "Normal">
<T "ResultSetItem" italic >
<T ".value()">
<P "Heading">
<T "Generates an object representing the value of the result set Item.  If ther\
 e is no type translator to convert the Oracle type to a Python object, a ">
<T "TypeError" face:"Courier" >
<T " will be raised.  In this instance, the application can refer to ">
<T "str(" face:"Helvetica" >
<T "ResultSetItem" italic face:"Helvetica" >
<T ")" face:"Helvetica" >
<T " to get the data in unaltered format.">
<P "Normal">
<P "Normal">
<T "Note: Currently, Numbers are retrieved as type SQL_STR (strings) not SQL_NU\
 M. Numeric translation from the string format happens in dco2's output convers\
 ion functions.  Numeric conversion is based on the precision (length) and scal\
 e (number of decimal places).  If the number has a scale, it is not an integer\
 , and so is returned as a Python float.  If it has no scale, and the precision\
  is less than 10, the result is returned as a Python int.  Integers with a pre\
 cision of 10 or higher are returned as Python longs. It is possible, however, \
 to use the str() representation function on the ResultSetItem object to retrie\
 ve the original string however.">
<P "Normal">
<T "LobLocator" italic >
<T ".length()">
<P "Heading">
<T "Returns the length of the LOB referenced by ">
<T "LobLocator" italic >
<T "." no-italic >
<P "Normal" justifyLeft >
<T "LobLocator" italic >
<T ".read([">
<T "size" italic >
<T ", [">
<T "offset" italic >
<T ", [">
<T "csid" italic >
<T ", [">
<T "csfrm" italic >
<T "]]]])">
<P "Heading">
<T "Returns the data from the ">
<T "LobLocator" italic >
<T " for " no-italic >
<T "size" italic >
<T " bytes, which defaults to the end of the LOB.  Optionally, the starting LOB\
  " no-italic >
<T "offset" italic >
<T " may be provided, as may be the character set ID " no-italic >
<T "csid" italic >
<T " and character set form " no-italic >
<T "csfrm" italic >
<T ".  Both " no-italic >
<T "csid" italic >
<T " and " no-italic >
<T "csfrm" italic >
<T "  default and can be safely omitted unless the default character set Oracle\
  was installed with is not appropriate." no-italic >
<P "Normal">
<T "LobLocator" italic >
<T ".write(">
<T "string" italic >
<T ", [">
<T "offset" italic >
<T ", [">
<T "csid" italic >
<T ", [">
<T "csfrm" italic >
<T "]]])">
<P "Heading">
<T "Writes ">
<T "string" italic >
<T " to the selected LOB, optionally starting ">
<T "offset" italic >
<T " bytes into the LOB.  The character set parameters " no-italic >
<T "csid" italic >
<T " and " no-italic >
<T "csfrm" italic >
<T " default to the Oracle installation defaults and can be safely omitted." no\
 -italic >
<P "Normal">
<P "Normal">
<T "Note: Empty LOBs can be inserted by using the EMPTY_BLOB() or EMPTY_CLOB() \
 Oracle functions.  LOB objects must be selected for updating before they can b\
 e written, for example:">
<P "Normal">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "import DCOracle2">
<P "Code" firstIndent:500 leftIndent:1000 >
<P "Code" firstIndent:500 leftIndent:1000 >
<T "db = DCOracle2.connect('scott/tiger')">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "c = db.cursor()">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "c.execute('insert into blobtest values (:1, :2, EMPTY_BLOB())', 'Shane Hath\
 away', 4)">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "c.execute('select * from blobtest where id=4 for update')">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "r = c.fetchone()">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "lob = r[2]">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "lob.write(shanepic)">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "db.commit()">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "LobLocator" italic >
<T ".trim(">
<T "length" italic >
<T ") ">
<P "Heading">
<T "Trims the LOB to the specified length, which must be less than or equal to \
 the current length.">
<P "Normal">
<T "BindingArray." italic >
<T "setStatic({0|1})" no-italic >
<P "Heading">
<T "Sets the binding type of the binding array, 1 for static binding, 0 for dyn\
 amic binding.  The internal function Cursor_bind in dco2.c uses this to set up\
  the binding values.">
<P "Normal">
<T "BindingArray" italic >
<T ".type([" no-italic >
<T "type" italic >
<T "])" no-italic >
<P "Heading">
<T "Gets/sets the Oracle type associated with the BindingArray.">
<P "Normal">
<T "BindingArray." italic >
<T "width()" no-italic >
<P "Heading">
<T "Gets the ">
<T "size" italic >
<T " field of the BindingArray (the width of each element.)" no-italic >
<P "Normal">
<page_break>
<T "BUILDING and INSTALLATION" size:18 >
<P "Heading" justifyCenter firstIndent:500 leftIndent:1000  size:18 >
<T "Generally, building the DCO2 module is as simple as setting up the Oracle b\
 uild environment and typing ">
<T "make" face:"Courier" >
<T ".  Here's an example:">
<P "Normal">
<P "Normal">
<T "bane(1)$ ">
<T ". oraenv" bold >
<P "Code">
<T "ORACLE_SID = [ORAC] ? ">
<T "<enter>" bold italic >
<P "Code">
<T "bane(2)$ ">
<T "make " bold >
<P "Code">
<T "(cd src; \\">
<P "Code">
<T "./testora)">
<P "Code">
<T "Checking ORACLE_HOME...passed.">
<P "Code">
<T "Checking for Oracle8i...not found, Oracle 8.0 assumed.">
<P "Code">
<T "(cd src; \\">
<P "Code">
<T "cp -p Setup.in Setup )">
<P "Code">
<T "(cd src; \\">
<P "Code">
<T "make -f Makefile.pre.in boot PYTHON=python || ./setuperrors; \\">
<P "Code">
<T "make dummy || ./setuperrors)">
<P "Code">
<T "make[1]: Entering directory `/stripe0/home/matt/wrk/dc/DCO2/src'">
<P "Code">
<T "rm -f *.o *~">
<P "Code">
<T "rm -f *.a tags TAGS config.c Makefile.pre python sedscript">
<P "Code">
<T "rm -f *.so *.sl so_locations">
<P "Code">
<T "VERSION=`python -c \"import sys; print sys.version[:3]\"`; \\">
<P "Code">
<T "installdir=`python -c \"import sys; print sys.prefix\"`; \\">
<P "Code">
<T "exec_installdir=`python -c \"import sys; print sys.exec_prefix\"`; \\">
<P "Code">
<T "make -f ./Makefile.pre.in VPATH=. srcdir=. \\">
<P "Code">
<T "        VERSION=$VERSION \\">
<P "Code">
<T "        installdir=$installdir \\">
<P "Code">
<T "        exec_installdir=$exec_installdir \\">
<P "Code">
<T "        Makefile">
<P "Code">
<T "make[2]: Entering directory `/stripe0/home/matt/wrk/dc/DCO2/src'">
<P "Code">
<T "sed -n \\">
<P "Code">
<T " -e '1s/.*/1i\\\\/p' \\">
<P "Code">
<T " -e '2s%.*%# Generated automatically from Makefile.pre.in by sedscript.%p' \
 \\">
<P "Code">
<T " -e '/^^VERSION=/s/^^VERSION=[    ]*\\(.*\\)/s%@VERSION[@]%\\1%/p' \\">
<P "Code">
<T " -e '/^^CC=/s/^^CC=[      ]*\\(.*\\)/s%@CC[@]%\\1%/p' \\">
<P "Code">
<T " -e '/^^CCC=/s/^^CCC=[    ]*\\(.*\\)/s%#@SET_CCC[@]%CCC=\\1%/p' \\">
<P "Code">
<T " -e '/^^LINKCC=/s/^^LINKCC=[      ]*\\(.*\\)/s%@LINKCC[@]%\\1%/p' \\">
<P "Code">
<T " -e '/^^OPT=/s/^^OPT=[    ]*\\(.*\\)/s%@OPT[@]%\\1%/p' \\">
<P "Code">
<T " -e '/^^LDFLAGS=/s/^^LDFLAGS=[    ]*\\(.*\\)/s%@LDFLAGS[@]%\\1%/p' \\">
<P "Code">
<T " -e '/^^DEFS=/s/^^DEFS=[  ]*\\(.*\\)/s%@DEFS[@]%\\1%/p' \\">
<P "Code">
<T " -e '/^^LIBS=/s/^^LIBS=[  ]*\\(.*\\)/s%@LIBS[@]%\\1%/p' \\">
<P "Code">
<T " -e '/^^LIBM=/s/^^LIBM=[  ]*\\(.*\\)/s%@LIBM[@]%\\1%/p' \\">
<P "Code">
<T " -e '/^^LIBC=/s/^^LIBC=[  ]*\\(.*\\)/s%@LIBC[@]%\\1%/p' \\">
<P "Code">
<T " -e '/^^RANLIB=/s/^^RANLIB=[      ]*\\(.*\\)/s%@RANLIB[@]%\\1%/p' \\">
<P "Code">
<T " -e '/^^MACHDEP=/s/^^MACHDEP=[    ]*\\(.*\\)/s%@MACHDEP[@]%\\1%/p' \\">
<P "Code">
<T " -e '/^^SO=/s/^^SO=[      ]*\\(.*\\)/s%@SO[@]%\\1%/p' \\">
<P "Code">
<T " -e '/^^LDSHARED=/s/^^LDSHARED=[  ]*\\(.*\\)/s%@LDSHARED[@]%\\1%/p' \\">
<P "Code">
<T " -e '/^^CCSHARED=/s/^^CCSHARED=[  ]*\\(.*\\)/s%@CCSHARED[@]%\\1%/p' \\">
<P "Code">
<T " -e '/^^LINKFORSHARED=/s/^^LINKFORSHARED=[        ]*\\(.*\\)/s%@LINKFORSHAR\
 ED[@]%\\1%/p' \\">
<P "Code">
<T " -e '/^^prefix=/s/^^prefix=\\(.*\\)/s%^^prefix=.*%prefix=\\1%/p' \\">
<P "Code">
<T " -e '/^^exec_prefix=/s/^^exec_prefix=\\(.*\\)/s%^^exec_prefix=.*%exec_prefi\
 x=\\1%/p' \\">
<P "Code">
<T " /usr/lib/python1.5/config/Makefile >sedscript">
<P "Code">
<T "echo \"/^^#@SET_CCC@/d\" >>sedscript">
<P "Code">
<T "echo \"/^^installdir=/s%=.*%=     /usr%\" >>sedscript">
<P "Code">
<T "echo \"/^^exec_installdir=/s%=.*%=/usr%\" >>sedscript">
<P "Code">
<T "echo \"/^^srcdir=/s%=.*%=         .%\" >>sedscript">
<P "Code">
<T "echo \"/^^VPATH=/s%=.*%=          .%\" >>sedscript">
<P "Code">
<T "echo \"/^^LINKPATH=/s%=.*%=       %\" >>sedscript">
<P "Code">
<T "echo \"/^^BASELIB=/s%=.*%=        %\" >>sedscript">
<P "Code">
<T "echo \"/^^BASESETUP=/s%=.*%=      %\" >>sedscript">
<P "Code">
<T "sed -f sedscript ./Makefile.pre.in >Makefile.pre">
<P "Code">
<T "/usr/lib/python1.5/config/makesetup \\">
<P "Code">
<T "         -m Makefile.pre -c /usr/lib/python1.5/config/config.c.in Setup -n \
  /usr/lib/python1.5/config/Setup">
<P "Code">
<T "make -f Makefile do-it-again">
<P "Code">
<T "make[3]: Entering directory `/stripe0/home/matt/wrk/dc/DCO2/src'">
<P "Code">
<T "/usr/lib/python1.5/config/makesetup \\">
<P "Code">
<T "         -m Makefile.pre -c /usr/lib/python1.5/config/config.c.in Setup -n \
  /usr/lib/python1.5/config/Setup">
<P "Code">
<T "make[3]: Leaving directory `/stripe0/home/matt/wrk/dc/DCO2/src'">
<P "Code">
<T "make[2]: Leaving directory `/stripe0/home/matt/wrk/dc/DCO2/src'">
<P "Code">
<T "make[1]: Leaving directory `/stripe0/home/matt/wrk/dc/DCO2/src'">
<P "Code">
<T "make[1]: Entering directory `/stripe0/home/matt/wrk/dc/DCO2/src'">
<P "Code">
<T "make[1]: `dummy' is up to date.">
<P "Code">
<T "make[1]: Leaving directory `/stripe0/home/matt/wrk/dc/DCO2/src'">
<P "Code">
<T "( cd src; \\">
<P "Code">
<T "make || ./builderrors)">
<P "Code">
<T "make[1]: Entering directory `/stripe0/home/matt/wrk/dc/DCO2/src'">
<P "Code">
<T "gcc -fPIC  -I/stripe1/oracle/8.0.5/rdbms/demo -I/stripe1/oracle/8.0.5/netwo\
 rk/public -I/stripe1/oracle/8.0.5/plsql/public -I/stripe1/oracle/8.0.5/rdbms/p\
 ublic -g -O2 -I/usr/include/python1.5 -I/usr/include/python1.5 -DHAVE_CONFIG_H\
  -c ./dco2.c">
<P "Code">
<T "gcc -shared  dco2.o  -L/stripe1/oracle/8.0.5/lib/ -lclntsh -lcommon -lcore4\
  -lnlsrtl3 -Wl,-rpath,/stripe1/oracle/8.0.5/lib -o dco2.so">
<P "Code">
<T "make[1]: Leaving directory `/stripe0/home/matt/wrk/dc/DCO2/src'">
<P "Code">
<T "cp src/dco2.so DCOracle2">
<P "Code">
<P "Code">
<P "Code">
<T "That's it!  The makefile will try to detect as much as it can and will prop\
 erly copy the built dco2.so module to the DCOracle2 directory.">
<P "Normal">
<P "Normal">
<T "A number of problems can happen during building:">
<P "Normal">
<P "Normal">
<T "Oracle environment not set up correctly" bold no-underline >
<P "Normal" underline >
<T "If  the environment variable">
<T " ORACLE_HOME" face:"Courier" >
<T " is not set, then the compilation will fail to find the proper Oracle inclu\
 de and library files.">
<P "Normal">
<P "Normal">
<T "Oracle development files not installed" bold >
<P "Normal" bold >
<T "Oracle installs the C headers to build OCI programs in ">
<T "$ORACLE_HOME/rdbms/demo" face:"Courier" >
<T ", ">
<T "$ORACLE_HOME/network/public" face:"Courier" >
<T ", and ">
<T "$ORACLE_HOME/plsql/public" face:"Courier" >
<T ".  If these directories do not have the proper include files, the build wil\
 l not succeed.  Oracle typically only installs these files when a complete ser\
 ver installation is performed.">
<P "Normal">
<P "Normal">
<T "Python development Makefile not available" bold >
<P "Normal" bold >
<T "If the make fails stating that ">
<T "/usr/lib/python1.5/config/Makefile" face:"Courier" >
<T " (or similar) cannot be built, it is symptomatic of the problem that the Py\
 thon development is not installed.  On a RedHat Linux system this would be the\
  ">
<T "python-devel " italic >
<T "package.">
<P "Normal">
<P "Normal">
<T "Python is not linked against libpthread (Linux)" bold >
<P "Normal" justifyLeft  bold >
<T "Oracle on Linux is linked against libpthread.  Some recent linux distributi\
 ons may include versions of Python that are not linked against libpthread.  Wh\
 en dco2 is loaded, it will load the Oracle shared libraries which are incompat\
 ible with the libpth libraries of the existing Python binary.  This will cause\
  random lockups to occur to the process.  The only solution is to acquire a Py\
 thon that is not linked against libpth, but is instead linked against libptthr\
 ead.  This may be accomplished by either obtaining a different Python binary p\
 ackage, or rebuilding Python from source. ">
<P "Normal">
<page_break>
<T "DIAGNOSIS">
<P "Heading" justifyCenter >
<T "Trace Table Debugging">
<P "Heading">
<T "DCO2 keeps an internal trace table, controlled by four environment variable\
 s:">
<P "Normal">
<P "Normal">
<T "^lh" face:"Symbol" >
<T "^ajDCO2TRACELOG^aj^aj(trace file name)">
<P "Normal" firstIndent:0 leftIndent:250 >
<T "^lh" face:"Symbol" >
<T "^ajDCO2TRACEDUMP^aj^aj(dump file name)">
<P "Normal" firstIndent:0 leftIndent:250 >
<T "^lh" face:"Symbol" >
<T "^ajDCO2TRACESIZE^aj^aj(trace table size)">
<P "Normal" firstIndent:0 leftIndent:250 >
<T "^lh" face:"Symbol" >
<T "^ajDCO2TRACEFLAGS^aj^aj(trace filter)">
<P "Normal" firstIndent:0 leftIndent:250 >
<P "Normal" leftIndent:250 >
<T "The variable DCO2TRACELOG, if set, names a file to record all trace events \
 (as they occur).  The variable DCO2TRACEDUMP names a file to dump the trace ta\
 ble to if an Oracle error occurs (but this is not the only reason dco2 will ra\
 ise an error). ">
<P "Normal" firstIndent:0 leftIndent:0 >
<P "Normal">
<T "DCOracle2 will sometimes trap errors within a try/except, so this will caus\
 e a trace dump to take place if DCO2TRACEDUMP is set.  Each new Oracle error w\
 ill append the trace file to the dump file.">
<P "Fixme">
<P "Normal">
<T "The variable DCO2TRACESIZE specifies the number of entries in the trace tab\
 le (the default is 512).  Each entry in the trace table is 10 words (40 bytes)\
  long, so the default trace table consumes 20K of storage.  Setting the size o\
 f the trace table to 0 will also set the DCO2TRACEFLAGS to 0.  DCO2TRACEFLAGS \
 is the binary OR (sum) of the following values:">
<P "Normal">
<P "Normal">
<RS>
<T "1">
<P "Cell">
<CE width:552 lm:100 rm:100 >
<T "Entry">
<P "Cell">
<CE width:1014 lm:100 rm:100 last >
<RS>
<T "2">
<P "Cell">
<CE width:552 lm:100 rm:100 >
<T "Exit">
<P "Cell">
<CE width:1014 lm:100 rm:100 last >
<RS>
<T "4">
<P "Cell">
<CE width:552 lm:100 rm:100 >
<T "Error">
<P "Cell">
<CE width:1014 lm:100 rm:100 last >
<RS>
<T "8">
<P "Cell">
<CE width:552 lm:100 rm:100 >
<T "(unused)">
<P "Cell">
<CE width:1014 lm:100 rm:100 last >
<RS>
<T "16">
<P "Cell">
<CE width:552 lm:100 rm:100 >
<T "Program">
<P "Cell">
<CE width:1014 lm:100 rm:100 last >
<RS>
<T "32">
<P "Cell">
<CE width:552 lm:100 rm:100 >
<T "Oracle">
<P "Cell">
<CE width:1014 lm:100 rm:100 last >
<RS>
<T "64">
<P "Cell">
<CE width:552 lm:100 rm:100 >
<T "Info">
<P "Cell">
<CE width:1014 lm:100 rm:100 last >
<RS>
<T "128">
<P "Cell">
<CE width:552 lm:100 rm:100 >
<T "Verbose">
<P "Cell">
<CE width:1014 lm:100 rm:100 last >
<P "Normal">
<T "The typical codes used are:">
<P "Normal">
<P "Normal">
<RS>
<T "17">
<P "Cell">
<CE width:569 lm:100 rm:100 >
<T "Function Entry">
<P "Cell">
<CE width:1778 lm:100 rm:100 last >
<RS>
<T "18">
<P "Cell">
<CE width:569 lm:100 rm:100 >
<T "Function Exit">
<P "Cell">
<CE width:1778 lm:100 rm:100 last >
<RS>
<T "33">
<P "Cell">
<CE width:569 lm:100 rm:100 >
<T "Oracle call">
<P "Cell">
<CE width:1778 lm:100 rm:100 last >
<RS>
<T "34">
<P "Cell">
<CE width:569 lm:100 rm:100 >
<T "Oracle return">
<P "Cell">
<CE width:1778 lm:100 rm:100 last >
<RS>
<T "36">
<P "Cell">
<CE width:569 lm:100 rm:100 >
<T "Oracle error">
<P "Cell">
<CE width:1778 lm:100 rm:100 last >
<RS>
<T "65">
<P "Cell">
<CE width:569 lm:100 rm:100 >
<T "Info arguments">
<P "Cell">
<CE width:1778 lm:100 rm:100 last >
<RS>
<T "66">
<P "Cell">
<CE width:569 lm:100 rm:100 >
<T "Info result">
<P "Cell">
<CE width:1778 lm:100 rm:100 last >
<RS>
<T "161">
<P "Cell">
<CE width:569 lm:100 rm:100 >
<T "Oracle handle call">
<P "Cell">
<CE width:1778 lm:100 rm:100 last >
<RS>
<T "162">
<P "Cell">
<CE width:569 lm:100 rm:100 >
<T "Oracle handle return">
<P "Cell">
<CE width:1778 lm:100 rm:100 last >
<P "Normal">
<T "Up to 7 arguments are also recorded in the trace table, with the first argu\
 ment being a function name.">
<P "Normal">
<T "Debugging with gdb">
<P "Heading">
<T "If dco2 causes a core dump (typically a segment fault) it is useful to obta\
 in a traceback of what was occurring at the time of the crash.  The gnu debugg\
 er ">
<T "gdb" face:"Courier" size:10 >
<T " should be run against python to obtain the internal trace table.  The foll\
 owing is an example:">
<P "Normal">
<P "Normal">
<T "% ">
<T "gdb python" bold >
<P "Code">
<T "...">
<P "Code">
<T "(gdb) ">
<T "run badprog.py" bold >
<P "Code" bold >
<T "...">
<P "Code">
<T "<segmentation fault>">
<P "Code">
<T "(gdb) ">
<T "where" bold >
<P "Code">
<T "(gdb) ">
<T "call Traceprint()^aj^aj^aj" bold >
<T "(prints trace table to stdout)" no-bold face:"Helvetica" >
<P "Code">
<T "(gdb)">
<T " " bold italic >
<T "call Tracedump()^aj^aj^aj^aj" bold no-italic >
<T "(saves trace table to \"dco2.tdm\")" no-bold no-italic face:"Helvetica" >
<P "Code" face:"Helvetica" >
<P "Code">
<T "The output of the trace table should be included in any support message.  A\
 lso include the output from the ">
<T "where" face:"Courier" size:10 >
<T " step of gdb, as this will pinpoint where in the code that the error occurr\
 ed.">
<P "Normal">
<T "Problem Reporting">
<P "Heading">
<T "When submitting a problem report to Zope Corporation about DCOracle2, it is\
  useful to include a trace dump when incorrect results are being returned.  Wh\
 en reporting problems, please be sure and identify the following:">
<P "Normal">
<T "^lh" face:"Symbol" >
<T "^ajOperating System">
<P "Normal" firstIndent:0 leftIndent:250 >
<T "^lh" face:"Symbol" >
<T "^ajDistribution (for Linux)">
<P "Normal" firstIndent:0 leftIndent:250 >
<T "^lh" face:"Symbol" >
<T "^ajPython Version">
<P "Normal" firstIndent:0 leftIndent:250 >
<T "^lh" face:"Symbol" >
<T "^ajOracle Version">
<P "Normal" firstIndent:0 leftIndent:250 >
<T "^lh" face:"Symbol" >
<T "^ajDCO2TRACEDUMP generated file (where appropriate)">
<P "Normal" firstIndent:0 leftIndent:250 >
<T "^lh" face:"Symbol" >
<T "^ajPython tracebacks (where appropriate)">
<P "Normal" firstIndent:0 leftIndent:250 >
<section  odd_page pageWidth:8500 pageHeight:11000 leftMargin:1000 rightMargin:\
 1000 topMargin:1000 bottomMargin:1000 bindingMargin:0 paperSize:1 duplex:1 gut\
 terWidth:500 oddHeader:Normal "_AX_HF_7" evenHeader:Normal "_AX_HF_6" oddFoote\
 r:Normal "_AX_HF_10" evenFooter:Normal "_AX_HF_9" sectNumFmt:-1 sectPageSep:"-\
 " pageNumFmt:0 pageNumCtl:0>
<T "Type Conversion Rules">
<P "Heading">
<T "The type conversion for dco2 uses the following rules (they are not necessa\
 rily the correct rules, but this the current implementation):">
<P "Normal">
<P "Normal">
<T "Input types are converted in the internal function bindObject and obey the \
 following rules:">
<P "Normal">
<P "Normal">
<T "1.^ajIf the object is None, bind the input as NULL.">
<P "Normal" firstIndent:0 leftIndent:250 >
<T "2.^ajIf the object is a BindingArray, set the column for array input/output\
 .">
<P "Normal" firstIndent:0 leftIndent:250 >
<T "3.^ajIf the object is a Cursor, bind the column as an SQL Result Set (SQLT_\
 RSET).">
<P "Normal" firstIndent:0 leftIndent:250 >
<T "4.^ajIf the object is an OracleDate, bind the column as a a Date (SQLT_DAT)\
 .">
<P "Normal" firstIndent:0 leftIndent:250 >
<T "5.^ajIf the object is a String, bind the column as a string (SQLT_STR).">
<P "Normal" firstIndent:0 leftIndent:250 >
<T "6.^ajIf the object is a Long, bind the column as an integer (SQLT_INT).">
<P "Normal" firstIndent:0 leftIndent:250 >
<T "7.^ajIf the object is an Integer, bind the column as an integer (SQLT_INT).\
 ">
<P "Normal" firstIndent:0 leftIndent:250 >
<T "8.^ajIf the object is a Float, bind the column as a float (SQLT_FLT).">
<P "Normal" firstIndent:0 leftIndent:250 >
<P "Normal">
<T "However, the DCOracle2 Python layer will pass type conversion overrides to \
 dco2 if the object is a tuple (value, type).  The input type override is eithe\
 r a string constant or a numeric value representing the SQL data type, e.g. 'S\
 QLT_STR' for string.  Unsupported column types can be coerced from string data\
  in this fashion.">
<P "Normal">
<P "Normal">
<T "Output types are converted by lookup in a type table.  This table is:">
<P "Normal">
<P "Normal">
<RS>
<T "Type Name" bold size:8 >
<P "Cell" bold size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Descripton" bold size:8 >
<P "Cell" bold size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Coercion" bold size:8 >
<P "Cell" bold size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Internal Type" bold size:8 >
<P "Cell" bold size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Result Object" bold size:8 >
<P "Cell" bold size:8  lB:0:0:"" rB:0:0:"" tB:0:0:"" bB:0:0:"" hB:0:0:"" vB:0:0\
 :"" shading:18:"":"":"" horizontalMargin:0 verticalMargin:0 dropShadow:0  noFr\
 ame >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_CHR" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Char" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "String" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_NUM" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Number" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "SQLT_STR" size:8 >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Automatic" size:8 >
<S_F fieldType:4 botPage footnote "1"
<start_eval_value>
<T "2" position:3 >
<end_eval_value>
>
<T "footnote">
<FV>
<T "2" size:8 position:3 >
<E_F>
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_INT" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Integer" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Integer" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_FLT" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Float" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Float" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_STR" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "String" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "String" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_VNU" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Length Prefixed Number" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_PDN" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Packed Decimal Number" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_LNG" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Long" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "String" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_VCS" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Variable Character" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_NON" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Null/Empty PCC desc" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_RID" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Row ID" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_DAT" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Date" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "OracleDate" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_VBI" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Binary VCS format" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_BIN" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Binary data" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "String" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_LBI" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Long binary data" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "String" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_UIN" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Unsigned Integer" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_SLS" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Display sign leading" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_LVC" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Longer longs (char)" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_LVB" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Longer longs (binary)" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_AFC" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "ANSI Fixed Char" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "String" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_AVC" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "ANSI Var Char" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_CUR" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Cursor" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_RDD" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Rowid Descriptor" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "SQLT_RID" size:8 >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_LAB" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Label" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_OSL" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "OS Label" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_NTY" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Named Type" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_REF" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Reference Type" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_CLOB" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "CLOB" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "LobLocator" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_BLOB" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "BLOB" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "LobLocator" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_BFILE" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Binary File LOB" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_CFILE" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Character File LOB" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_RSET" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Result set" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_NCO" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Named collection" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_VST" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "OCIString type" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_ODT" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "OCIDate type" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_DATE" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "ANSI date" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_TIME" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Time" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_TIME_TZ" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Time with zone" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_TIMESTAMP" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Timestamp" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_TIMESTAMP_TZ" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Timestamp with zone" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<P "Normal">
<T "The result object column, if ``--'' means that there is no type converter f\
 or this type, and that only the raw interface from dco2's ResultSet object can\
  get at the value.  When an output type is coerced, it is requested from Oracl\
 e as the type specified instead of the original format.">
<P "Normal">
<P "Heading">
<section  next_page pageWidth:8500 pageHeight:11000 leftMargin:1000 rightMargin\
 :1000 topMargin:1000 bottomMargin:1000 bindingMargin:0 paperSize:1 duplex:1 gu\
 tterWidth:500 evenHeader:Inherit evenFooter:Inherit sectNumFmt:-1 sectPageSep:\
 "-" pageNumFmt:0 pageNumCtl:0>
<T "Implementation Notes">
<P "Heading">
<T "The C source dco2.c should be self-contained, requiring only system, Python\
 , and Oracle include and library files.">
<P "Normal">
<P "Normal">
<T "Every normal entry and exit to functions in the code utilizes the TRACE mac\
 ro to record a trace table entry.  TRACE macro calls also surround Oracle call\
 s, attempting to capture enough parameter data to provide a meaningful basis f\
 or diagnosis of errors.  When the address of data is recorded, the address is \
 very useful for inspection within gdb.">
<P "Normal">
<P "Normal">
<T "Most complex about operation is how type binding occurs; the two most respo\
 nsible functions are ``bindObject'' and ``Cursor_bind.''  The bindObject funct\
 ion is responsible for inspecting the object to determine the type, and set up\
  the data for the bind, without actually performing the bind.  Cursor_bind wil\
 l use this data to call OCIBindByName, OCIBindByPos, OCIBindDynamic, and OCIBi\
 ndArrayOfStruct, as required.  BindingArray operation is filled with nuances a\
 nd side-effects; largely these involve whether or not the parameters maxarr_le\
 n and curelep get set in the OCIBind calls.  The two values should only be set\
  when an array bind to PL/SQL is desired.   In practice, the code path makes t\
 he assumption that a BindingArray with size > 1 (not # of elements USED > 1) i\
 s destined for an array bind and then changing its mind when it becomes eviden\
 t that the statement is used differently (i.e. it is messy).">
<P "Normal">
<P "Normal">
<T "Type coercion for input binds is done by seeing if the object is of type In\
 stanceType; if so, it is checked for the attributes ``value'' and ``type.''  T\
 he bound value and type are set accordingly.  This coercion is checked by bind\
 Object and BindingArrayObject_ass_item.">
<P "Normal">
<P "Normal">
<T "For non-coerced types, a request type override is looked up in the type tab\
 le.  The override will specify more convenient external datatypes (largely for\
  the convenience of the type conversion routines.)  In this way, for instance,\
  numeric type SQLT_NUM is requested as character SQLT_STR.">
<P "Normal">
<P "Normal">
<T "The convertOut functions mapped in the type table are called by ResultSetIt\
 em_value or BindingArrayObject_item functions to create a Python object.  This\
  result object is cached so the underlying data field may be cleared and reuse\
 d.  The ResultSet in particular works this way effectively ``paging'' though r\
 equests.   DCOracle2 will never skip values in the ResultSet, which is ineffic\
 ient if the Python application is going to throw them away (although not as in\
 efficient as obtaining them from Oracle in the first place.)">
<P "Normal">
<P "Normal">
<T "Raw results from ResultSetItems are available through the str mechanism, wh\
 ich bypasses the output type conversion.  Applications can use this to support\
  additional data types.">
<P "Normal">
<section  next_page pageWidth:8500 pageHeight:11000 leftMargin:1000 rightMargin\
 :1000 topMargin:1000 bottomMargin:1000 bindingMargin:0 paperSize:1 duplex:1 gu\
 tterWidth:500 evenHeader:Inherit evenFooter:Inherit sectNumFmt:-1 sectPageSep:\
 "-" pageNumFmt:0 pageNumCtl:0>
<end_flow>
<start_hdrftr "_AX_HF_1">
<P "HdrFtr">
<end_hdrftr>
<start_hdrftr "_AX_HF_2">
<P "HdrFtr" justifyCenter >
<end_hdrftr>
<start_hdrftr "_AX_HF_3">
<P "HdrFtr" size:8 >
<end_hdrftr>
<start_hdrftr "_AX_HF_4">
<P "HdrFtr" size:8 >
<end_hdrftr>
<start_footnote "1">
<S_F fieldType:5
<start_eval_value>
<T "2" position:3 >
<end_eval_value>
>
<T "footnote_body">
<FV>
<T "2" size:8 position:3 >
<E_F>
<T "Automatic format means conversion to Float if the scale is greater than zer\
 o or the precision and scale are zero; conversion to Integer if the scale is l\
 ess than 10, or conversion to Long otherwise." size:8 >
<P "Footnote" size:8 >
<end_footnote>
<start_footnote "2">
<S_F fieldType:5
<start_eval_value>
<T "1" position:3 >
<end_eval_value>
>
<T "footnote_body">
<FV>
<T "1" size:6 position:3 >
<E_F>
<T "The DatabaseError object is the error returned when an OCI error is raised,\
  regardless of the meaning of the OCI error." size:6 >
<P "Footnote" size:6 >
<end_footnote>
<start_hdrftr "_AX_HF_6">
<T "^ajDCOracle2 C Layer API">
<P "HdrFtr">
<end_hdrftr>
<start_hdrftr "_AX_HF_7">
<T "^ajDCOracle2 C Layer API">
<P "HdrFtr">
<end_hdrftr>
<start_hdrftr "_AX_HF_9">
<T "Page " size:10 >
<S_F fieldType:19
<start_eval_value>
<T "???">
<end_eval_value>
>
<T "page_number">
<FV>
<T "???" size:10 >
<E_F>
<T "^aj^ajCopyright ^kj 2002 Zope Corporation" size:10 >
<P "HdrFtr">
<end_hdrftr>
<start_hdrftr "_AX_HF_10">
<T "Copyright ^kj 2002, Zope Corporation^aj^ajPage " size:10 >
<S_F fieldType:19
<start_eval_value>
<T "???">
<end_eval_value>
>
<T "page_number">
<FV>
<T "???" size:10 >
<E_F>
<P "HdrFtr" size:10 >
<end_hdrftr>
<start_vars>
<V "Language@" 1>
<V "Style$" "letter.aw">
<V "PathName$" "/mirror1/home/matt/wrk/DCO2/doc/Implementation.aw">
<V "DocName$" "Implementation.aw">
<V "ReadOnly@" 0>
<V "Creator$" "Applix Words">
<V "Created$" "Release 5.00 (build 1315) #18">
<V "AxCreationCodeVersion$" "Mon Mar 27 01:32:58 2000">
<V "CreationDate$" "Fri Jul 14 13:34:36 2000">
<V "CreationUser$" "matt">
<V "Updated$" "Release 5.00 (build 1315) #18">
<V "AxUpdateCodeVersion$" "Mon Mar 27 01:32:58 2000">
<V "UpdateDate$" "Wed Apr 17 11:01:37 2002">
<V "UpdateUser$" "matt">
<V "DocWindowAttrType@" 1>
<V "DocWindowSize$" < 13720 10560>>
<V "PathNameImport$" "/mirror1/home/matt/wrk/DCO2/doc/Implementation.aw">
<end_vars>
<end_document>
*END WORDS
